package com.doit.day01.op

import scala.io.Source

/**
 * 1.读取文件中得内容==》获取到每一行数据
 * 2.最好是将每一行数据转换成一个个得单词
 * 3.既然我们得到了每一个单词，针对单词进行分组
 * 4.求每个单词得个数
 */
object WordCountDemo {
  def main(args: Array[String]): Unit = {

    //1.读取文件中得内容==》获取到每一行数据
    val line: Iterator[String] = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\Teach\\scalaDemo\\data\\WordCount").getLines()

    //List("hello,hi,hello","hive,hadoop,hive,hbase,hive")
    val list: List[String] = line.toList
    /*
        //2.最好是将每一行数据转换成一个个得单词
        val wordArr: List[Array[String]] = list.map(_.split(","))

        //对他进行压平
        val flatten: List[String] = wordArr.flatten*/

    //    ==>
    val flatten: List[String] = list.flatMap(_.split(","))

    //    println(flatten)//List(hello, hi, hello, hive, hadoop, hive, hbase, hive, hello, hi, hello, hive)

    //3.既然我们得到了每一个单词，针对单词进行分组
    val map: Map[String, List[String]] = flatten.groupBy(word => word)
    println(map)

    //4.求每个单词得个数   count针对得是map里面得元素统计符合条件得个数
    val wordCount: Map[String, Int] = map.map(map => (map._1, map._2.size))
    println(wordCount)


    //在公司里面，大部分得人都会这么写
    Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\Teach\\scalaDemo\\data\\WordCount").getLines().toList
      .flatMap(_.split(","))
      .groupBy(word=>word)
      .map(map=>(map._1,map._2.size))
      .foreach(println)





    //    map.map(map=> {
    //      val word: String = map._1
    //      val list: List[String] = map._2
    //      list.count(word=>true)
    //    })


  }


}
